package leetcode.top100;

import baseclass.e_tree.Code11_ReverseBT;
import utils.TreeNode;

/**
 * 给定一个二叉树，检查它是否是镜像对称的。
 *
 * 例如，二叉树 [1,2,2,3,4,4,3] 是对称的。
 *
 *     1
 *    / \
 *   2   2
 *  / \ / \
 * 3  4 4  3
 * 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
 *
 *     1
 *    / \
 *   2   2
 *    \   \
 *    3    3
 *
 * {@link Code11_ReverseBT}
 * @date 2020/4/7 16:58
 */
public class Code101_IsMirrorBT {
    public boolean isSymmetric1(TreeNode root) {
        if(root == null) return true;
        return preOrder(root.left,root.right);
    }

    private boolean preOrder(TreeNode root1, TreeNode root2) {
        if(root1 == null && root2 == null) return true;
        if(root1 == null || root2 == null) return false;
        if(root1.val != root2.val) return false;
        return preOrder(root1.left,root2.right)
                && preOrder(root1.right,root2.left);
    }

}
